#!/usr/bin/perl
# configure_remote.pm
# Copyright (C) 2006, 2007  Stephane Alnet
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
# 

package CCNCore::spool::configure_remote;
use strict; use warnings;

our $D;

# Configure and commit on a remote node from a manager.

sub run
{
    my $ticket   = pop;
    my $callback = pop;

    my $server_pk = shift;
    use CCNCore::Provisioning::Local;
    my $p = new CCNCore::Provisioning::Local;

    if($p->is_manager)
    {
        my $b = new CCNCore::Provision::Base($p);
        my $ip = $b->primary_ip($server_pk);

        if(defined $ip)
        {
            use CCNCore::Scripting;
            use CCN::ssh;
            $D->log("starting local-node-configure.sh on $ip");
            CCN::Scripting::exec_command($CCN::ssh::command." root\@$ip ".CCNCore::Home::manager.'/bin/local-node-configure.sh');
            $D->log("starting local-node-commit.sh on $ip");
            CCN::Scripting::exec_command($CCN::ssh::command." root\@$ip ".CCNCore::Home::manager.'/bin/local-node-commit.sh');
            $D->log("completed on $ip");
        }
        else
        {
            $D->log("Could not find IP for $server_pk");
        }
    }
    else
    {
        $D->log("Local server is not a manager!");
    }

    use CCNCore::Provision::Unspool;
    my $s = new CCNCore::Provision::Unspool($p,$callback,$ticket);
    $s->reply();
}

1;